Wo finde ich die Funktion xxx? ============================== Zunächst sollte man sich versichern, daß die Funktion tatsächlich fehlt: Z.B. Floating-Point-Funktionen befinden sich in einer speziellen Link-Library, die erst mit der Option -lm eingebunden wird. Ferner kann es eine fehlende Variable sein: Wenn man z.B. ohne es zu bemerken eine Intuition-Funktion benutzt, dann wird der Linker über das Fehlen eines Symbols IntuitionBase klagen. In diesem Fall muß man also lediglich das Folgende irgendwo im globalen Teil seines Quelltextes einbauen: struct Library *IntuitionBase; (Und vergessen Sie nicht, die Library mit OpenLibrary() zu eröffnen und mit CloseLibrary() zu schließen! :-) Allerdings könnte die Funktion natürlich tatsächlich fehlen. Wenn man zum Beispiel nur die Version 2.0 der amiga.lib hat, dann fehlen etwa die Locale-Funktionen oder die Memory-Pool-Funktionen obwohl sie prinzipiell verwendbar sind. (1) Die einfachste (und beste) Lösung ist, das sogenannte NDU zu kaufen. Siehe Include-Dateien. Wer nicht solange warten möchte, für den ist die Frage, welche Art von Funktion in seiner Link-Library fehlt: * Einfache Amiga-Library-Funktionen (z.B. exec/AllocPooled oder locale/OpenCatalogA) kann man mit Pragmas aufrufen und braucht dann lediglich Informationen über die Aufrufkonventionen (Library-Base, Library-Vektor-Offset und Argumentregister) * Tag-Funktionen sind meistens einfach Zwischenfunktionen, die ihre Argumente auf dem Stack erwarten und dann die eigentliche Library-Funktion aufrufen. Wenn man z.B. die Funktion dos/AllocDosObject, die eine Konstante und einen Zeiger auf ein Array als Argumente erwartet, nach der obigen Methode konstruiert hat, dann hat man damit auch ihre Stack-Variante! Dazu erzeugt man aifach die folgende Funktion: #include #include /* Evtl. anderer Name */ void *AllocDosObjectTags(ULONG objtype, Tag tag1, ...) { return(AllocDosObject(objtype, (struct TagItem *) &tag1); } Mit fd2pragma kann das auch automatisch geschehen. Siehe Pragmas. * Einige Funktionen bleiben aber noch übrig: Amiga.lib enthält nämlich auch Funktionen, die für sich selbst interessant sind, z.B. die BOOPSI-Funktionen (DoMethod, DoSuperMethod), die Memory-Pool-Funktionen (LibAllocPooled, LibCreatePool, die Ersatz für entsprechende 3.0-Funktionen sind) oder HookEntry, das sehr hilfreich bei der Programmierung von Hooks ist. Diese kann man nur durch entsprechende, disassemblierte und neu assemblierte oder compilierter Versionen ersetzen. Im AmigaFAQ-Archiv sind einige dieser Funktionen bereits enthalten. ---------- Footnotes ---------- (1) Dieses Problem betrifft vor allem Besitzer von Aztec-C, das seither nicht weiter unterstützt wird und von Dice, der manchmal etwas unvollständig ist. Ich besitze beide ..


converted with guide2html by Kochtopf